import axios from 'axios'
// import qs from 'qs'
import NProgress from 'nprogress' // Progress 进度条
import 'nprogress/nprogress.css' // Progress 进度条样式
import { Message } from 'element-ui'
import { Loading } from 'element-ui'

// NProgress.start() - 显示进度条
// NProgress.set(0.4) - 设置百分比
// NProgress.inc() - 稍微增加
// NProgress.done() - 完成进度(进度条消失)
// NProgress.inc(0.2)
// NProgress.configure({ easing: 'ease', speed: 500, showSpinner: false })

// let loading
// //内存中正在请求的数量
// let loadingNum = 0
// const startLoading = () =>{
//     if(loadingNum === 0){
//         loading = Loading.service({
//             lock: true,
//             text: '拼命加载中...',
//             background:'rgba(255,255,255,0.5)',
//         })
//     }
//     //请求数量加1
//     loadingNum ++
// }
//
// const endLoading = () => {
//     //请求数量减1
//     loadingNum --
//     if(loadingNum <= 0){
//         loading.close()
//     }
// }
// http请求拦截器
axios.interceptors.request.use(config => {
    NProgress.start()
    // startLoading()
    return config
}, error => {
    return Promise.reject(error)
})

// http响应拦截器
axios.interceptors.response.use(data => { // 响应成功关闭loading
    NProgress.done()
    // endLoading()
    // console.log(data)
    // if (data.data.code === 3) {
    //     Message.error(data.data.message)
    //     return data
    // }
    // if (data.data.code !== 0) {
    //     Message.error(data.data.message)
    //     return data
    // }
    // if (data.status !== 200) {
    //     Message.error(data.data.message)
    //     return
    // }
    return data
}, error => {
    NProgress.done()
    // endLoading()
    // console.log(error.response.status)
    let code = error.response.status
    let message = '请求错误'
    switch (code) {
        case 400:
            message = '请求错误'
            break
        case 401:
            message = '未授权，请登录'
            break
        case 403:
            message = '拒绝访问'
            break
        case 404:
            message = '请求地址出错'
            break
        case 408:
            message = '请求超时'
            break
        case 422:
            // message = error.response.data.message
            // let path = window.location.href.split('#')[1]
            // // console.log(path)
            // if (path !== '/login') {
            //     sessionStorage.clear()
            //     setTimeout(() => {
            //         location.reload()
            //     }, 1500)
            // }

            message = error.response.data.message
            if (error.response.data.code === 3) {
                let path = window.location.href.split('#')[1]
                // console.log(path)
                if (path !== '/login') {
                    sessionStorage.clear()
                    setTimeout(() => {
                        location.reload()
                    }, 1500)
                }
            }
            break
        case 500:
            message = '服务器内部错误'
            break
        case 501:
            message = '服务未实现'
            break
        case 502:
            message = '网关错误'
            break
        case 503:
            message = '服务不可用'
            break
        case 504:
            message = '网关超时'
            break
        case 505:
            message = 'HTTP版本不受支持'
            break
        default:
    }
    Message.error(message)
    return Promise.reject(error)
})

// 超时时间
// axios.defaults.timeout = 30000

// export function get(url, params){
//     return new Promise((resolve, reject) =>{
//         axios.get(url, {
//             params: params
//         }).then(res => {
//             resolve(res.data);
//         }).catch(err =>{
//             reject(err.data)
//         })
//     });}

// export function post(url, params) {
//     return new Promise((resolve, reject) => {
//         axios.post(url, QS.stringify(params))
//             .then(res => {
//                 resolve(res.data);
//             })
//             .catch(err =>{
//                 reject(err.data)
//             })
//     });
// }

let baseUrl;
if (process.env.NODE_ENV === 'development') {
    baseUrl = '/api'
} else {
    baseUrl = 'https://mobile.laiba.shop'
}
// const baseUrl = '/api'
const get = function (url, params) {
    params = params || {};
    return new Promise(((resolve, reject) => {
        axios.get(baseUrl + url, {
            params: params
        }).then(res => {
            resolve(res.data);
        }).catch(err => {
            reject(err)
        })
    }))
}

const post = function (url, params) {
    params = params || {};
    return new Promise(((resolve, reject) => {
        axios.post(baseUrl + url, params)
            .then(res => {
                resolve(res.data);
            }).catch(err => {
                reject(err)
        })
    }))
}

const upPdfPost = function (url, formData, headers) {
    return new Promise(((resolve, reject) => {
        axios.post(baseUrl + url, formData, headers)
            .then(res => {
                resolve(res.data);
            }).catch(err => {
                reject(err)
        })
    }))
}

const postExcel = function (url, params) {
    return new Promise(((resolve, reject) => {
        axios.post(baseUrl + url, params, {responseType: 'blob'})
            .then(res => {
                resolve(res.data)
            }).catch(err => {
            reject(err)
        })
    }))
}

export { get, post, upPdfPost, postExcel }
